﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Lamex.mDashboard.Common
{
    class TreeListHelper
    {
        public static List<TreeNode> ParseDir(string dataRootDir, List<TreeNode> data)
        {
            //如果传递的list为空，则新建一个
            if (data == null)
            {
                data = new List<TreeNode>();
            }
            //如果目录不存在则直接原样将data返回
            if (!System.IO.Directory.Exists(dataRootDir))
            {
                return data;
            }

            TreeNode node = null;
            //创建目录对象
            System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(dataRootDir);

            //使用数组接收目录下的所有目录
            System.IO.DirectoryInfo[] subDirs = dir.GetDirectories();

            //循环每个目录
            foreach (System.IO.DirectoryInfo subDir in subDirs)
            {
                //新建节点对象
                node = new TreeNode();

                //节点的Id取当前目录的名字
                //node.Id = subDir.Name;
                node.Id = subDir.FullName;//加上路径，防止重名，导至加载到TreeList失败

                //节点的父级ID 取上层目录的名字
                //node.ParentId = dir.Name;
                node.ParentId = dir.FullName;//加上路径，防止重名，导至加载到TreeList失败

                //节点要显示的文本也取当前目录的名字
                node.NodeText = subDir.Name;
                //节点Tag也取当前目录的名字
                node.Tag = (object)subDir;
                //节点类型为文件夹
                node.NodeType = TreeNodeTypes.Folder;
                //将当前节点添加到list数据源
                data.Add(node);
                //因为是文件夹，所以需要迭代当前方法 并将当前目录作为参数重新传递 直到迭代完所有文件夹
                //这里使用FullName方法  获取全路径
                ParseDir(subDir.FullName, data);
            }

            //遍历完文件夹之后 遍历 文件
            //使用FileInfo的GetGiles方法 获取所有文件
            System.IO.FileInfo[] subFiles = dir.GetFiles();
            //遍历所有文件
            foreach (System.IO.FileInfo subFile in subFiles)
            {
                if (subFile.FullName.Contains(".xml"))//只显示.xml文件
                {
                    node = new TreeNode();
                    //node.Id = subFile.Name;
                    node.Id = subFile.FullName;//加上路径，防止重名，导至加载到TreeList失败
                                               //node.ParentId = dir.Name;
                    node.ParentId = dir.FullName;//加上路径，防止重名，导至加载到TreeList失败
                    node.NodeText = subFile.Name;
                    node.NodeType = TreeNodeTypes.File;
                    node.Tag = (object)subFile;
                    data.Add(node);
                }
            }
            //返回数据源
            return data;
        }
    }
    class TreeNode
    {
        //标识Id
        private string id;
        //父级节点ID
        private string parentId;
        //节点显示文本
        private string nodeText;
        //节点Tag
        private object tag;
        private TreeNodeTypes nodeType = TreeNodeTypes.Folder;

        public TreeNodeTypes NodeType
        {
            get { return nodeType; }
            set { nodeType = value; }
        }

        public string NodeText
        {
            get { return nodeText; }
            set { nodeText = value; }
        }
        public string ParentId
        {
            get { return parentId; }
            set { parentId = value; }
        }

        public string Id
        {
            get { return id; }
            set { id = value; }
        }
        public object Tag
        {
            get { return tag; }
            set { tag = value; }
        }
    }

    public enum TreeNodeTypes
    {
        /// <summary>
        /// 文件夹
        /// </summary>
        Folder = 0,
        /// <summary>
        /// 文件
        /// </summary>
        File = 1
    }
}
